package com.yidu.action;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.action.vo.ListenModuleManageVo;
import com.yidu.common.JsonMsg;
import com.yidu.common.Tools;
import com.yidu.domain.ListenBackstageUser;
import com.yidu.domain.ListenModuleRole;
import com.yidu.domain.ListenRole;
import com.yidu.service.ListenModuleManageService;
import com.yidu.service.ListenModuleRoleService;
import com.yidu.service.ListenRoleService;

/**
 * 
 * 类注释:模块角色前端控制器
 * @author wpy
 * 2018年11月27日上午11:45:02
 */
@Controller
@RequestMapping("/listenModuleRole")
public class ListenModuleRoleController {
	
	@Resource
	private ListenModuleRoleService moduleRoleService;
	
	@Resource
	private ListenModuleManageService moduleManageService;
	
	@Resource
	private ListenRoleService roleService;
	
	/**
	 *  两个表的增加或修改(角色表+角色模块表)
	 * @param request 请求
	 * @param role 角色对象
	 * @param mmId 模块id
	 * @return
	 */
	@RequestMapping("insertOrUpdate")
	@ResponseBody
	public JsonMsg insertOrUpdate(HttpServletRequest request,ListenRole role,String mmId) {
		//得到会话
		HttpSession session = request.getSession();
		//得到用户
		ListenBackstageUser user = (ListenBackstageUser) session.getAttribute("user");
		//创建工具提示类
		JsonMsg msg = new JsonMsg();
		//定义角色id随机码用于增加
		String roleId = Tools.getRandomString();
		//根据逗号拆分模块id
		String[] split = mmId.split(",");
		//创建角色模块对象
		ListenModuleRole moduleRole = new ListenModuleRole();
		//角色对象不为空时
		if(role!=null) {
			//默认为有效数据
			role.setIsva(1);
			//操作时间
			role.setOpenTime(new Date());
			//用户不为空时
			if(user!=null) {
				//角色操作人为用户名
				role.setOper(user.getBuName());
			}
			//角色id是否为空来决定增加或修改
			if(role.getRoleId()!=null && !"".equals(role.getRoleId())) {
				//先调用根据当前角色id删除对应的角色模块数据的方法
				moduleRoleService.deleteByRole(role.getRoleId());
				//再重新添加当前角色id选中的角色模块数据
				//循环拆分后的模块
				for (int i = 0; i < split.length; i++) {
					//如果当前的模块等于空就跳出
					if(i>0 && ("".equals(split[i]))) {
						break;
					}
					//将当前的模块id赋值给角色模块对象
					moduleRole.setMmId(split[i]);
					//将角色对象的角色id赋值给角色模块对象的角色id
					moduleRole.setRoleId(role.getRoleId());
					//将随机码赋值给角色模块对象的角色模块id
					moduleRole.setMrId(Tools.getRandomString());
					//调用根据角色模块对象增加的方法
					moduleRoleService.insertSelective(moduleRole);
				}
				//根据角色对象修改
				int rows = roleService.updateByPrimaryKeySelective(role);
				//判断是否修改成功
				if(rows>-1) {
					msg.setDatas(1);
					msg.setMsg("修改角色成功");
				}else {
					msg.setDatas(2);
					msg.setMsg("修改角色失败");
				}
			}else {
				//将之前定义的随机角色id赋值给角色对象中的角色id
				role.setRoleId(roleId);
				//调用根据角色对象增加的方法
				int rows = roleService.insertSelective(role);
				//循环拆分后的模块id增加角色模块表数据
				for (int i = 0; i < split.length; i++) {
					//如果当前的模块等于空就跳出
					if(i>0 && ("".equals(split[i]))) {
						break;
					}
					//将当前的模块id赋值给角色模块对象
					moduleRole.setMmId(split[i]);
					//将角色对象的角色id赋值给角色模块对象的角色id
					moduleRole.setRoleId(role.getRoleId());
					//将随机码赋值给角色模块对象的角色模块id
					moduleRole.setMrId(Tools.getRandomString());
					//调用根据角色模块对象增加的方法
					moduleRoleService.insertSelective(moduleRole);
				}
				//判断是否增加成功
				if(rows>-1) {
					msg.setDatas(1);
					msg.setMsg("增加角色成功");
				}else {
					msg.setDatas(2);
					msg.setMsg("增加角色失败");
				}
			}
		}
		return msg;
	}
	

	/**
	 * 修改时显示并选中角色所关联的模块
	 * @param roleId 角色id
	 * @return
	 */
	@RequestMapping("moduleTree")
	@ResponseBody
	public List<ListenModuleManageVo> moduleTree(String roleId){
		//创建一个角色模块对象
		ListenModuleRole moduleRole = new ListenModuleRole();
		//判断参数是否为空
		if(roleId!=null && !"".equals(roleId)){
			//赋值给角色模块对象
			moduleRole.setRoleId(roleId);
		}
		//调用根据角色模块对象得到所有当前角色id的模块id集合
		List<ListenModuleRole> moduleList = moduleRoleService.selectByRole(moduleRole);
		//得到所有上级模块
		List<ListenModuleManageVo> listmVo = moduleManageService.selectNoSuperior();
		
		//遍历所有上级模块
		for (ListenModuleManageVo listVo : listmVo) {
			//根据上级模块id查询下级模块
			List<ListenModuleManageVo> subVo = moduleManageService.selectSubordinate(listVo.getId());
			//遍历所有下级模块
			for (ListenModuleManageVo vo : subVo) {
				//遍历角色所对应的模块
				for (ListenModuleRole mr : moduleList) {
					//判断查询出来的模块id是否等于下级模块id
					if(mr.getMmId().equals(vo.getMmId())) {
						//下级模块选中
						vo.setChecked(true);
					}
					//判断查询出来的模块id是否等于上级模块id
					if(mr.getMmId().equals(listVo.getMmId())) {
						//上级模块选中
						listVo.setChecked(true);
					}
				}
				
			}
			//将对应的所有下级模块赋值给上级模块
			listVo.setData(subVo);
		}
		return listmVo;
	}

    /**
     * 查询库存总数量 销售总数量 财务总金额 当天销售量
     * @param request 请求
     * @return
     */
	@RequestMapping("selectCount")
	@ResponseBody
    public Map<String, Object> selectCount (HttpServletRequest request) {
		//创建时间集合
		Map<String, Object> timeMap = new HashMap<String,Object>();
		//创建日期类
		Date date = new Date();
		//定义日期格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		//转换当天的系统格式
		//开始时间
		String todayStart = sdf.format(date)+" 00:00:00";
		//结束时间
		String todayEnd= sdf.format(date)+" 23:59:59";
		
		//把时间给map
		timeMap.put("todayStart",todayStart);
		timeMap.put("todayEnd", todayEnd);
		
		//创建map集合
		Map<String, Object> map =new HashMap<>();
		//获取会话
		HttpSession session = request.getSession();
		//得到用户
		ListenBackstageUser user = (ListenBackstageUser) session.getAttribute("user");
		//判断用户不为空时
		if(user!=null) {
			//将用户里的公司id(用户对象中取出)放入时间map集合中
			timeMap.put("companyId", user.getSite());
			//根据时间map查询得到当天销售量
			Integer todaySell = moduleRoleService.selectTodaySell(timeMap);
			//根据用户里的公司id查询
			//得到库存数量
			Integer stock = moduleRoleService.selectStockCount(user.getSite());
			//得到总公司销售额
			Integer sell = moduleRoleService.selectSellCount(user.getSite());
			//得到分公司销售额
			Integer branch = moduleRoleService.selectBranchCount(user.getSite());
			//得到公司财务总金额
			Double finance = moduleRoleService.selectFinanceCount(user.getSite());
			
			//判断查询出来的数据是否为空 设置为0
			if(stock==null) {
				stock=0;
			}
			if(sell==null) {
				sell=0;
			}
			if(branch==null) {
				branch=0;
			}
			if(finance==null) {
				finance=0.00;
			}
			if(todaySell==null) {
				todaySell=0;
			}
			//将查到的数据放入map集合
			//库存总数量
			map.put("stock", stock);
			//销售总数量(总公司和分公司销售量)
			map.put("sell", sell + branch);
			//财务总金额
			map.put("finance", finance);
			//当天销售量
			map.put("todaySell", todaySell);
		}
		
    	return map;
    };
}
